package com.tanhua.server.controller;

import com.tanhua.model.vo.MovementsVo;
import com.tanhua.model.vo.PageResult;
import com.tanhua.model.vo.TodayBest;
import com.tanhua.server.serivce.MovementsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

@RestController
@RequestMapping("/movements")
public class MovementsController {

    @Autowired
    private MovementsService movementsService;

    /**
     * 发布动态
     *    POST
     *    请求参数(Body)：
     *      textContent：文字内容
     *      imageContent[] ：图片文件的数据
     *      只要请求参数中包含文件，就不能传输JSON
     */
    @PostMapping
    public ResponseEntity movements(String textContent, MultipartFile [] imageContent)
            throws IOException {
        //调用service
        movementsService.movements(textContent,imageContent);
        return ResponseEntity.ok(null);
    }

    /**
     * 查询个人动态
     *   请求地址：GET   /all
     *   请求参数：page，pagesize，userId
     *   返回值：
     *         PageResult  -- List<MovementVo>
     */
    @GetMapping("/all")
    public ResponseEntity all(@RequestParam(defaultValue = "1") Integer page,
                              @RequestParam(defaultValue = "10") Integer pagesize, Long userId) {
        //调用service查询 PageResult
        PageResult vo = movementsService.findByUserId(page,pagesize,userId);
        //构造返回
        return ResponseEntity.ok(vo);
    }

    /**
     * 查询好友动态
     *    请求地址：  GET
     *    请求参数：page，pagesize
     *    返回值：
     *       PageResult  -- List<MovementVo>
     */
    @GetMapping
    public ResponseEntity movements(@RequestParam(defaultValue = "1") Integer page,
                              @RequestParam(defaultValue = "10") Integer pagesize) {
        //调用service查询 PageResult
        PageResult vo = movementsService.findByFriendId(page,pagesize);
        //构造返回
        return ResponseEntity.ok(vo);
    }

    /**
     * 查询推荐动态：
     *    请求地址： GET  /recommend
     *    请求参数：page，pagesize
     *    返回值：
     *         PageResult  -- List<MovementVo>
     */
    @GetMapping("/recommend")
    public ResponseEntity recommend(@RequestParam(defaultValue = "1") Integer page,
                                    @RequestParam(defaultValue = "10") Integer pagesize) {
        //调用service查询 PageResult
        PageResult vo = movementsService.findByRecommend(page,pagesize);
        //构造返回
        return ResponseEntity.ok(vo);
    }

    /**
     * 根据id查询动态
     *   GET    /{movementId}
     *
     *       /1
     *       /2
     *       /visitors
     *   返回值MovementsVo
     */
    @GetMapping("/{movementId}")
    public ResponseEntity findMovementById(@PathVariable("movementId") String movementId) {
        MovementsVo vo = movementsService.findMovementById(movementId);
        return ResponseEntity.ok(vo);
    }


    /**
     * 动态点赞：
     *    GET       /{movementId}/like
     *    返回值：
     *       没有名字：点赞数
     *       针对相应数据有且只有基本数据类型时
     *         有相应的名称:   构造map集合
     *         没有响应的名称:  直接返回基本数据类型
     *
     */
    @GetMapping("/{movementId}/like")
    public ResponseEntity like(@PathVariable("movementId") String movementId) {
        //点赞
        Integer count = movementsService.like(movementId);
        return ResponseEntity.ok(count);
    }

    /**
     * 取消点赞：
     *    GET    /{movementId}/dislike
     *    返回值：
     *       点赞总数
     */
    @GetMapping("/{movementId}/dislike")
    public ResponseEntity dislike(@PathVariable("movementId") String movementId) {
        //取消点赞
        Integer count = movementsService.dislike(movementId);
        return ResponseEntity.ok(count);
    }


    //喜欢
    @GetMapping("/{movementId}/love")
    public ResponseEntity love(@PathVariable("movementId") String movementId) {
        //点赞
        Integer count = movementsService.love(movementId);
        return ResponseEntity.ok(count);
    }

    //取消喜欢
    @GetMapping("/{movementId}/unlove")
    public ResponseEntity unlove(@PathVariable("movementId") String movementId) {
        //取消点赞
        Integer count = movementsService.unlove(movementId);
        return ResponseEntity.ok(count);
    }

    /**
     *  首页最新访客
     *  请求路径：GET   /visitors
     */
    @GetMapping("/visitors")
    public ResponseEntity visitors() {
        //调用service查询
        List<TodayBest> vos = movementsService.visitors();
        return ResponseEntity.ok(vos);
    }
}
